package br.com.petsis.funcionalidades.bi;

import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.servlet.ServletContext;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import br.com.petsis.entity.Cliente;
import br.com.petsis.entity.Empresa;
import br.com.petsis.entity.FormaPagamento;
import br.com.petsis.entity.Pacote;
import br.com.petsis.entity.Pedido;
import br.com.petsis.entity.PedidoServico;
import br.com.petsis.entity.Produto;
import br.com.petsis.entity.Servico;
import br.com.petsis.utilitarios.UtilDate;
import br.com.petsis.utilitarios.UtilGraficos;
import br.com.petsis.vo.ValoresGraficosVO;

@Name("biController")
@Scope(ScopeType.CONVERSATION)
//@Restrict(value="#{identity.hasRole('"+PerfilUsuario.PERFIL_PETSHOP+"')}")
public class BiController {
	
	@In(create=true)
	private EntityManager entityManager;
	
	private Date dataInicio;
	
	private Date dataFim;
	
	private byte[] graficoTendenciaMeses;

	private byte[] graficoTendenciaMesesVlrBruto;
	
	private byte[] graficoDiasSemanaPedido;
	
	private byte[] graficoDiasSemanaMedia;

	private byte[] graficoServicosMaisPedidos;
	
	private byte[] graficoMelhoresClientes;
	
	private byte[] graficoMelhoresClientesValor;

	private byte[] graficoProdutosMaisVendidos;
	
	private byte[] graficoFormasPagamento;
	
	private byte[] graficoTendenciaAtendimentos;
	
	private boolean exibirGraficos;
	
	@In(required=false)
    private Empresa empresaSessao;
	
	public byte[] getGraficoFormasPagamento() {
		return graficoFormasPagamento;
	}

	public void setGraficoFormasPagamento(byte[] graficoFormasPagamento) {
		this.graficoFormasPagamento = graficoFormasPagamento;
	}

	public byte[] getGraficoProdutosMaisVendidos() {
		return graficoProdutosMaisVendidos;
	}

	public void setGraficoProdutosMaisVendidos(byte[] graficoProdutosMaisVendidos) {
		this.graficoProdutosMaisVendidos = graficoProdutosMaisVendidos;
	}

	public byte[] getGraficoMelhoresClientes() {
		return graficoMelhoresClientes;
	}

	public void setGraficoMelhoresClientes(byte[] graficoMelhoresClientes) {
		this.graficoMelhoresClientes = graficoMelhoresClientes;
	}

	public byte[] getGraficoMelhoresClientesValor() {
		return graficoMelhoresClientesValor;
	}

	public void setGraficoMelhoresClientesValor(byte[] graficoMelhoresClientesValor) {
		this.graficoMelhoresClientesValor = graficoMelhoresClientesValor;
	}

	public byte[] getGraficoServicosMaisPedidos() {
		return graficoServicosMaisPedidos;
	}

	public void setGraficoServicosMaisPedidos(byte[] graficoServicosMaisPedidos) {
		this.graficoServicosMaisPedidos = graficoServicosMaisPedidos;
	}

	public byte[] getGraficoDiasSemanaPedido() {
		return graficoDiasSemanaPedido;
	}

	public byte[] getGraficoDiasSemanaMedia() {
		return graficoDiasSemanaMedia;
	}

	public void setGraficoDiasSemanaMedia(byte[] graficoDiasSemanaMedia) {
		this.graficoDiasSemanaMedia = graficoDiasSemanaMedia;
	}

	public void setGraficoDiasSemanaPedido(byte[] graficoDiasSemanaPedido) {
		this.graficoDiasSemanaPedido = graficoDiasSemanaPedido;
	}

	public byte[] getGraficoTendenciaMesesVlrBruto() {
		return graficoTendenciaMesesVlrBruto;
	}

	public void setGraficoTendenciaMesesVlrBruto(
			byte[] graficoTendenciaMesesVlrBruto) {
		this.graficoTendenciaMesesVlrBruto = graficoTendenciaMesesVlrBruto;
	}

	public byte[] getGraficoTendenciaMeses() {
		return graficoTendenciaMeses;
	}

	public void setGraficoTendenciaMeses(byte[] graficoTendenciaMeses) {
		this.graficoTendenciaMeses = graficoTendenciaMeses;
	}

	public Date getDataInicio() {
		return dataInicio;
	}

	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}

	public Date getDataFim() {
		return dataFim;
	}

	public void setDataFim(Date dataFim) {
		this.dataFim = dataFim;
	}
	
	public void onLoad(){
		System.out.println("");
		setExibirGraficos(false);
	}

	public void gerarGraficos(){
		if(empresaSessao != null){
			graficoTendenciaMensal();
			graficoDiasSemanaMaisMovimento();
			graficoServicosMaisPedidos();
			graficoMelhoresClientes();
			gerarGraficoMelhoresClientesValor();
			graficoProdutosMaisVendidos();
			graficoQtdeFormasDePagamento();
			gerarGraficoDiasSemanaMedia();
			graficoTendenciaAtendimentos();
			setExibirGraficos(true);
		}
	}
	
	public void graficoTendenciaMensal(){
		List<Pedido> pedidos = entityManager.createQuery("select p from Pedido p where DATE(p.dtaPedido) >= DATE(:dtaInicio) and DATE(p.dtaPedido) <= DATE(:dtaFim) and p.empresa.idEmpresa = :idEmpresa order by p.dtaPedido ASC")
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		Set<String> listaMeses = new HashSet<String>();
		for(Pedido p : pedidos){
			listaMeses.add(UtilDate.getMesString(p.getDtaPedido())+"/"+UtilDate.getAnoInt(p.getDtaPedido()));
		}
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(String mes : listaMeses){
			ValoresGraficosVO vo = new ValoresGraficosVO();
			vo.setLabel(mes);
			float quant = 0;
			for(Pedido p : pedidos){
				String column = UtilDate.getMesString(p.getDtaPedido())+"/"+UtilDate.getAnoInt(p.getDtaPedido());
				if(column.equals(mes)){
					vo.setValor(++quant);
					vo.adicionaData(UtilDate.getMesInt(p.getDtaPedido()), UtilDate.getAnoInt(p.getDtaPedido()));
				}
			}
			valores.add(vo);
		}
		
		// Em ordem crescente  
	    Collections.sort (valores, new Comparator() {  
	        public int compare(Object o1, Object o2) {  
	            ValoresGraficosVO p1 = (ValoresGraficosVO) o1;  
	            ValoresGraficosVO p2 = (ValoresGraficosVO) o2;  
	            return p1.getData().before(p2.getData()) ? -1 : (p1.getData().after(p2.getData()) ? +1 : 0);  
	        }  
	    });  
	    
		graficoTendenciaMeses = UtilGraficos.gerarGraficoDeLinhas("Tendência Mensal - Qtde de Pedidos x Mês", valores, 500, 300);
		
		List<Pacote> pacotes = entityManager.createQuery("select p from Pacote p where DATE(p.dtaPagamento) >= DATE(:dtaInicio) and DATE(p.dtaPagamento) <= DATE(:dtaFim) and p.empresa.idEmpresa = :idEmpresa order by p.dtaPagamento ASC")
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		List<ValoresGraficosVO> valores2 = new ArrayList<ValoresGraficosVO>();
		for(String mes : listaMeses){
			ValoresGraficosVO vo = new ValoresGraficosVO();
			vo.setLabel(mes);
			float quant = 0;
			for(Pedido p : pedidos){
				String column = UtilDate.getMesString(p.getDtaPedido())+"/"+UtilDate.getAnoInt(p.getDtaPedido());
				if(column.equals(mes)){
					quant = quant + p.getVlrPedido();
					vo.adicionaData(UtilDate.getMesInt(p.getDtaPedido()), UtilDate.getAnoInt(p.getDtaPedido()));
				}
			}
			for(Pacote p : pacotes){
				String column = UtilDate.getMesString(p.getDtaPagamento())+"/"+UtilDate.getAnoInt(p.getDtaPagamento());
				if(column.equals(mes)){
					quant = quant + p.getVlrPacote();
					vo.adicionaData(UtilDate.getMesInt(p.getDtaPagamento()), UtilDate.getAnoInt(p.getDtaPagamento()));
				}
			}
			vo.setValor(quant);
			valores2.add(vo);
		}
		
		// Em ordem crescente  
	    Collections.sort (valores2, new Comparator() {  
	        public int compare(Object o1, Object o2) {  
	            ValoresGraficosVO p1 = (ValoresGraficosVO) o1;  
	            ValoresGraficosVO p2 = (ValoresGraficosVO) o2;  
	            return p1.getData().before(p2.getData()) ? -1 : (p1.getData().after(p2.getData()) ? +1 : 0);  
	        }  
	    });  
		graficoTendenciaMesesVlrBruto = UtilGraficos.gerarGraficoDeLinhas("Tendência Mensal - Rendimento Bruto x Mês", valores2, 500, 300);
	}

	public void graficoDiasSemanaMaisMovimento(){
		List<Pedido> pedidos = entityManager.createQuery("select p from Pedido p where DATE(p.dtaPedido) >= DATE(:dtaInicio) and DATE(p.dtaPedido) <= DATE(:dtaFim) and p.empresa.idEmpresa = :idEmpresa order by p.dtaPedido ASC")
		.setParameter("dtaInicio", getDataInicio())
		.setParameter("dtaFim", getDataFim())
		.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
		.getResultList();
	
		Set<String> listaDias = new HashSet<String>();
		for(Pedido p : pedidos){
			listaDias.add(UtilDate.getDiaString(p.getDtaPedido()));
		}
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(String dia : listaDias){
			ValoresGraficosVO vo = new ValoresGraficosVO();
			vo.setLabel(dia);
			float quant = 0;
			for(Pedido p : pedidos){
				if(UtilDate.getDiaString(p.getDtaPedido()).equals(dia)){
					vo.setValor(++quant);
					vo.setDia(UtilDate.getDiaDaSemanaInt(p.getDtaPedido()));
				}
			}
			valores.add(vo);
		}
		
		// Em ordem crescente  
	    Collections.sort (valores, new Comparator() {  
	        public int compare(Object o1, Object o2) {  
	            ValoresGraficosVO p1 = (ValoresGraficosVO) o1;  
	            ValoresGraficosVO p2 = (ValoresGraficosVO) o2;  
	            return p1.getDia() < p2.getDia() ? -1 : (p1.getDia() > p2.getDia() ? +1 : 0);  
	        }  
	    });  
	    
		graficoDiasSemanaPedido = UtilGraficos.gerarGraficoDeLinhas("Tendência Semanal - Qtde de pedidos x Dias da semana", valores, 500, 300);
	}
	
	public void gerarGraficoDiasSemanaMedia(){
		List<Pedido> pedidos = entityManager.createQuery("select p from Pedido p where DATE(p.dtaPedido) >= DATE(:dtaInicio) and DATE(p.dtaPedido) <= DATE(:dtaFim) and p.empresa.idEmpresa = :idEmpresa order by p.dtaPedido ASC")
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		Set<String> listaDias = new HashSet<String>();
		for(Pedido p : pedidos){
			listaDias.add(UtilDate.getDiaString(p.getDtaPedido()));
		}
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		int qtdeSeg = 0;
		int qtdeTer = 0;
		int qtdeQua = 0;
		int qtdeQui = 0;
		int qtdeSex = 0;
		int qtdeSab = 0;
		
		Date dataInc = getDataInicio();
		
		while(dataInc.before(getDataFim()) || dataInc.equals(getDataFim())){
			if("Segunda".equals(UtilDate.getDiaString(dataInc))){
				qtdeSeg++;
			}
			if("Terça".equals(UtilDate.getDiaString(dataInc))){
				qtdeTer++;
			}
			if("Quarta".equals(UtilDate.getDiaString(dataInc))){
				qtdeQua++;
			}
			if("Quinta".equals(UtilDate.getDiaString(dataInc))){
				qtdeQui++;
			}
			if("Sexta".equals(UtilDate.getDiaString(dataInc))){
				qtdeSex++;
			}
			if("Sábado".equals(UtilDate.getDiaString(dataInc))){
				qtdeSab++;
			}
			dataInc = UtilDate.getDataAcrescidaEmDias(dataInc, 1);
		}
		
		for(String dia : listaDias){
			ValoresGraficosVO vo = new ValoresGraficosVO();
			vo.setLabel(dia);
			float quant = 0;
			for(Pedido p : pedidos){
				if(UtilDate.getDiaString(p.getDtaPedido()).equals(dia)){
					Set<Integer> listaIdPets = new HashSet<Integer>();
					if(p.getPedidoServicos() != null && p.getPedidoServicos().size() > 0){
						for(PedidoServico ps : p.getPedidoServicos()){
							listaIdPets.add(ps.getPet().getIdPet());
						}
						quant = quant + listaIdPets.size();
					}
					vo.setValor(quant);
					vo.setDia(UtilDate.getDiaDaSemanaInt(p.getDtaPedido()));
				}
			}
			if("Segunda".equals(dia)){
				vo.setValor(vo.getValor()/qtdeSeg);
			}
			if("Terça".equals(dia)){
				vo.setValor(vo.getValor()/qtdeTer);
			}
			if("Quarta".equals(dia)){
				vo.setValor(vo.getValor()/qtdeQua);
			}
			if("Quinta".equals(dia)){
				vo.setValor(vo.getValor()/qtdeQui);
			}
			if("Sexta".equals(dia)){
				vo.setValor(vo.getValor()/qtdeSex);
			}
			if("Sábado".equals(dia)){
				vo.setValor(vo.getValor()/qtdeSab);
			}
			
			DecimalFormat df = new DecimalFormat("#,###.00");
			vo.setValor(new Float(df.format(vo.getValor()).replace(",", ".")));
			valores.add(vo);
		}
		
		// Em ordem crescente  
		Collections.sort (valores, new Comparator() {  
			public int compare(Object o1, Object o2) {  
				ValoresGraficosVO p1 = (ValoresGraficosVO) o1;  
				ValoresGraficosVO p2 = (ValoresGraficosVO) o2;  
				return p1.getDia() < p2.getDia() ? -1 : (p1.getDia() > p2.getDia() ? +1 : 0);  
			}  
		});  
		
		graficoDiasSemanaMedia = UtilGraficos.gerarGraficoDeLinhas("Qtde de animais x Dias da semana", valores, 500, 300);
	}
	
	public void graficoServicosMaisPedidos(){
		String QRY_SERVICOS = "SELECT COUNT(ID_PEDIDO_SERVICO) as QUANTIDADE,"+
			"p.ID_SERVICO "+
			"FROM pedido_servico p "+
			"INNER JOIN pedido pe " +
			"on p.ID_PEDIDO = pe.ID_PEDIDO " +
			"WHERE DATE(pe.DTA_PEDIDO) >= DATE(:dtaInicio) AND " +
			"DATE(pe.DTA_PEDIDO) <= DATE(:dtaFim) " +
			"and pe.id_empresa = :idEmpresa " +
			"group by ID_SERVICO "+
			"order by QUANTIDADE DESC "+
			"LIMIT 0,8;";
		
		List<Object[]> resultServicos = entityManager.createNativeQuery(QRY_SERVICOS)
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(Object[] o1 : resultServicos){
			ValoresGraficosVO valor = new ValoresGraficosVO();
			valor.setValor(new Float(((BigInteger)o1[0]).intValue()));
			valor.setLabel(entityManager.find(Servico.class, (Integer)o1[1]).getDscNome());
			//Float dividido = quant/total;
			valores.add(valor);
		}
		
		graficoServicosMaisPedidos = UtilGraficos.gerarGraficoDeBarras("Servi�os mais pedidos - 8+", valores, 500, 300);
	}
	
	public void graficoMelhoresClientes(){
		String QRY_CLIENTES = "SELECT COUNT(ID_PEDIDO) AS QUANTIDADE," +
			"p.ID_CLIENTE " +
			"FROM pedido p " +
			"WHERE DATE(p.DTA_PEDIDO) >= DATE(:dtaInicio) " +
			"AND DATE(p.DTA_PEDIDO) <= DATE(:dtaFim) " +
			"AND p.id_empresa = :idEmpresa " +
			"GROUP BY p.ID_CLIENTE " +
			"ORDER BY QUANTIDADE DESC LIMIT 0,8;";
		
		List<Object[]> resultServicos = entityManager.createNativeQuery(QRY_CLIENTES)
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(Object[] o1 : resultServicos){
			ValoresGraficosVO valor = new ValoresGraficosVO();
			valor.setValor(new Float(((BigInteger)o1[0]).intValue()));
			valor.setLabel(entityManager.find(Cliente.class, (Integer)o1[1]).getDscNome());
			//Float dividido = quant/total;
			valores.add(valor);
		}
		
		graficoMelhoresClientes = UtilGraficos.gerarGraficoDeBarras("Melhores clientes - Qtde. de Pedidos", valores, 500, 300);
	}
	
	public void gerarGraficoMelhoresClientesValor(){
		String QRY_CLIENTES = "SELECT SUM(p.VLR_PEDIDO) AS VALOR," +
			"p.ID_CLIENTE " +
			"FROM pedido p " +
			"WHERE DATE(p.DTA_PEDIDO) >= DATE(:dtaInicio) " +
			"AND DATE(p.DTA_PEDIDO) <= DATE(:dtaFim) " +
			"AND p.id_empresa = :idEmpresa " +
			"GROUP BY p.ID_CLIENTE " +
			"ORDER BY VALOR DESC LIMIT 0,8;";
		
		List<Object[]> resultServicos = entityManager.createNativeQuery(QRY_CLIENTES)
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(Object[] o1 : resultServicos){
			ValoresGraficosVO valor = new ValoresGraficosVO();
			valor.setValor(new Float((Double)o1[0]));
			valor.setLabel(entityManager.find(Cliente.class, (Integer)o1[1]).getDscNome());
			//Float dividido = quant/total;
			valores.add(valor);
		}
		
		graficoMelhoresClientesValor = UtilGraficos.gerarGraficoDeBarras("Melhores clientes - Valor Total Gasto", valores, 500, 300);
	}
	
	public void graficoProdutosMaisVendidos(){
		String QRY_PRODUTOS = "SELECT COUNT(ID_PEDIDO_PRODUTO) as QUANTIDADE," +
			"p.ID_PRODUTO, " +
			"p.QTDE_PRODUTO " +
			"FROM pedido_produto p " +
			"INNER JOIN pedido pe " +
			"on p.ID_PEDIDO = pe.ID_PEDIDO " +
			"WHERE DATE(pe.DTA_PEDIDO) >= DATE(:dtaInicio) AND " +
			"DATE(pe.DTA_PEDIDO) <= DATE(:dtaFim) " +
			"and pe.id_empresa = :idEmpresa " +
			"group by ID_PRODUTO " +
			"order by QUANTIDADE DESC " +
			"LIMIT 0,8;";
		
		List<Object[]> resultServicos = entityManager.createNativeQuery(QRY_PRODUTOS)
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(Object[] o1 : resultServicos){
			ValoresGraficosVO valor = new ValoresGraficosVO();
			valor.setValor(new Float(((BigInteger)o1[0]).intValue()));
			valor.setLabel(entityManager.find(Produto.class, (Integer)o1[1]).getDscNome());
			Float qtde = new Float(((Integer)o1[2]).intValue());
			valor.setValor(valor.getValor() * qtde);
			//Float dividido = quant/total;
			valores.add(valor);
		}
		
		graficoProdutosMaisVendidos = UtilGraficos.gerarGraficoDeBarras("Produtos mais vendidos - 8+", valores, 500, 300);
	}
	
	public void graficoQtdeFormasDePagamento(){
		String QRY_FORMAS_PAG = "SELECT COUNT(p.ID_PEDIDO) as QUANTIDADE, "+
			"p.ID_FORMA_PAGAMENTO "+
			"FROM pedido p "+
			"WHERE DATE(p.DTA_PEDIDO) >= DATE(:dtaInicio) AND "+
			"DATE(p.DTA_PEDIDO) <= DATE(:dtaFim) "+ 
			"and p.id_empresa = :idEmpresa "+ 
			"group by ID_FORMA_PAGAMENTO "+ 
			"order by QUANTIDADE DESC "+
			"LIMIT 0,8";
		
		List<Object[]> resultServicos = entityManager.createNativeQuery(QRY_FORMAS_PAG)
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList();
		
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(Object[] o1 : resultServicos){
			ValoresGraficosVO valor = new ValoresGraficosVO();
			valor.setValor(new Float(((BigInteger)o1[0]).intValue()));
			valor.setLabel(entityManager.find(FormaPagamento.class, (Integer)o1[1]).getDscFormaPagamento());
			//Float dividido = quant/total;
			valores.add(valor);
		}
		
		graficoFormasPagamento = UtilGraficos.gerarGraficoDeBarras("Pedidos x Formas de Pagamento", valores, 500, 300);
	}
	
	public void graficoTendenciaAtendimentos(){
		List<Object[]> lista = entityManager.createNativeQuery("select SUM(p.vlr_atendimento),MONTH(p.dta_atendimento) mes,YEAR(p.dta_atendimento) ano from prontuario p where p.dta_atendimento >= :dtaInicio and p.dta_atendimento <= :dtaFim group by mes, ano order by ano,mes")
			.setParameter("dtaInicio", getDataInicio())
			.setParameter("dtaFim", getDataFim())
			.getResultList();
		List<ValoresGraficosVO> valores = new ArrayList<ValoresGraficosVO>();
		for(Object[] o : lista){
			ValoresGraficosVO valor = new ValoresGraficosVO();
			valor.setValor(new Float((Double)o[0]));
			valor.setLabel(UtilDate.getMesString(Integer.parseInt(o[1].toString())));
			//Float dividido = quant/total;
			valores.add(valor);
		}
		graficoTendenciaAtendimentos = UtilGraficos.gerarGraficoDeLinhas("Tendência Mensal - Valor Total Atendimentos x Mês", valores, 500, 300);
	}
	
	public String recuperaCaminhoImagem(String nomeImagem){
		FacesContext context1 = FacesContext.getCurrentInstance();
		String caminhoAplicacao = ((ServletContext) context1.getExternalContext().getContext()).getRealPath("/");
		return caminhoAplicacao+"/img/"+nomeImagem;
	}
	
	public String imprimir(){
		return "imprimirGraficos";
	}

	public boolean isExibirGraficos() {
		return exibirGraficos;
	}

	public void setExibirGraficos(boolean exibirGraficos) {
		this.exibirGraficos = exibirGraficos;
	}

	public byte[] getGraficoTendenciaAtendimentos() {
		return graficoTendenciaAtendimentos;
	}

	public void setGraficoTendenciaAtendimentos(byte[] graficoTendenciaAtendimentos) {
		this.graficoTendenciaAtendimentos = graficoTendenciaAtendimentos;
	}
	
	
}
